import axios, { AxiosError, AxiosResponse, InternalAxiosRequestConfig } from 'axios';
import Constants from 'expo-constants';
import TokenManager from '../utils/tokenManager';

// 创建axios实例
const apiClient = axios.create({
  baseURL: Constants.expoConfig?.extra?.apiUrl || 'https://dev-api.example.com',
  headers: {
    'Content-Type': 'application/json',
  },
  timeout: 10000,
});

// 请求拦截器
apiClient.interceptors.request.use(
  async (config: InternalAxiosRequestConfig) => {
    // 获取Token并添加到请求头
    const token = await TokenManager.getToken();
    if (token && config.headers) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  (error: AxiosError) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
apiClient.interceptors.response.use(
  (response: AxiosResponse) => {
    // 可以在这里添加缓存逻辑，根据需要缓存响应数据
    // 例如: CacheManager.setCache('api_data', response.data, CacheType.TEMPORARY, 1);
    return response.data;
  },
  async (error: AxiosError) => {
    console.error('API Error:', error.message);

    // 处理Token过期错误
    if (error.response?.status === 401) {
      // 这里可以实现Token刷新逻辑
      // 例如: const newToken = await refreshToken();
      // if (newToken) {
      //   await TokenManager.setToken(newToken);
      //   // 重试请求
      //   return apiClient(error.config);
      // }
    }

    return Promise.reject(error);
  }
);

export default apiClient;